package log

import (
	"io/ioutil"
	"log"
	"os"
	"sync"
)

//[info]为蓝色，[error]为红色
//使用log.Lshortfile支持显示文件名和代码行号
//暴露Error，Errorf，Info，Infof4个方法
var(
	errorLog =log.New(os.Stdout,"\033[31m[error]\033[0m ",log.LstdFlags|log.Lshortfile)
	infoLog=log.New(os.Stdout,"\033[34m[info ]\033[0m ",log.LstdFlags|log.Lshortfile)
	loggers=[]*log.Logger{errorLog,infoLog}
	mu sync.Mutex
)
//log methods
var(
	Error=errorLog.Println
	Errorf=errorLog.Printf
	Info=infoLog.Println
	Infof=infoLog.Printf
)

const(
	InfoLevel=iota
	ErrorLevel
	Disabled
)

//三个层级声明为三个常量，通过控制Output来控制日志是否打印
//如果设置为ErrorLeve，infolog的输出会被定向到ioutil.Discard即不打印该日志
func SetLevel(level int)  {
	mu.Lock()
	defer mu.Unlock()

	for _,logger:=range loggers{
		logger.SetOutput(os.Stdout)
	}
	if ErrorLevel<level{
		errorLog.SetOutput(ioutil.Discard)
	}
	if InfoLevel<level{
		infoLog.SetOutput(ioutil.Discard)
	}
}


